﻿using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.VisualStudio.Shell;

using Microsoft.TeamFoundation.VersionControl.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using FunctionPoint.Services;
using FunctionPoint.ViewModels;
using FunctionPoint.Utility;
using FunctionPoint.Common;
using System.Collections.ObjectModel;



namespace FunctionPoint
{
    /// <summary>
    /// This class implements the tool window exposed by this package and hosts a user control.
    ///
    /// In Visual Studio tool windows are composed of a frame (implemented by the shell) and a pane, 
    /// usually implemented by the package implementer.
    ///
    /// This class derives from the ToolWindowPane class provided from the MPF in order to use its 
    /// implementation of the IVsUIElementPane interface.
    /// </summary>
    [Guid("1944e0d8-fd37-4bf2-8c98-233072768ade")]
    public class FunctionPointExplorerToolWindowHost : ToolWindowPane
    {




        /// <summary>
        /// Standard constructor for the tool window.
        /// </summary>
        public FunctionPointExplorerToolWindowHost() :
            base(null)
        {
            // Set the window title reading it from the resources.
            this.Caption = "Function Explorer Host";
            // Set the image that will appear on the tab of the window frame
            // when docked with an other window
            // The resource ID correspond to the one defined in the resx file
            // while the Index is the offset in the bitmap strip. Each image in
            // the strip being 16x16.
            this.BitmapResourceID = 301;
            this.BitmapIndex = 1;


            FunctionPointExplorerToolWindow toolWindow = new FunctionPointExplorerToolWindow();
            FunctionPointExplorerToolWindowViewModel viewModel = new FunctionPointExplorerToolWindowViewModel();

            Project teamProject = null;//
            //var tfsProject = TFSService.GetTeamProject();

            if (teamProject == null)
            {
                LocalTfsService service = new LocalTfsService();
                TfsUtility tfsUtility = new TfsUtility(service);

                teamProject = service.WorkItemStore.Projects["Function Point Plugin"];

                viewModel.QueryHierarchy = new ObservableCollection<QueryItemBase>(
                    tfsUtility.GetAllQueriesAndOptionallyWorkItems(teamProject.Name, true, false));
                
                viewModel.QueryHierarchyFlat = tfsUtility.GetFlattenedQueryHierarchy(teamProject.Name, false);
            }

            toolWindow.DataContext = viewModel;


            // This is the user control hosted by the tool window; Note that, even if this class implements IDisposable,
            // we are not calling Dispose on this object. This is because ToolWindowPane calls Dispose on 
            // the object returned by the Content property.
            //base.Content = new MyControl();
            base.Content = toolWindow;
        }
       
    }
}
